// 安装步骤
// 1. cnpm install -g express-generator
// 2. express -e 项目名称
// 3. cnpm i  安装依赖

// app.js就是我们自己写的index.js，表示项目的入口文件

/*
  package.json: 是项目依赖的记录文件
  "scripts": {
    "start": "node ./bin/www",
    "abc": "node abc.js"
  },
  scripts在这里表示项目命令的别名，运行 npm run start 就相当于运行了node ./bin/www
  如果别名是start，那么可以省略run
*/ 





// 引入了一些内置的和第三方的模块
var createError = require('http-errors'); // 处理错误的模块
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser'); // 缓存的解析模块
var logger = require('morgan'); // 跟日志相关的模块

// 引入了自己定义的两个路由的自定义模块
var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');

var app = express();

// 设置了views文件夹为项目的视图文件夹
// 并且指定了ejs为模板引擎
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');

// 使用了上面引入的模块
app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());

// 指定了public文件夹为项目的静态资源目录
app.use(express.static(path.join(__dirname, 'public')));

// 使用了两个路由模块
app.use('/', indexRouter);
app.use('/users', usersRouter);


// 下面都是处理错误的
// catch 404 and forward to error handler
app.use(function(req, res, next) {
  next(createError(404));
});

// error handler
app.use(function(err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  // render the error page
  res.status(err.status || 500);
  res.render('error');
});


// Commonjs的暴露
module.exports = app;
